#!/usr/bin/env python
# coding: utf-8

# 在本次实验中我们分析 2018-06-28到2022-11-28中国每个月的进出口差额（亿美元），大城市失业率（%），消费平零售总额（亿人民币）这三组数据之间的关联 

# 首先我们导入包和数据，并输出数据

# In[1]:


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 
import seaborn as sns
from sklearn.preprocessing import StandardScaler
import statsmodels.formula.api as smf

#读取工作簿和工作簿中的工作表

spss=pd.read_excel('经济数据分析.xls')
print(spss)


# 输出数据信息

# In[2]:


spss.info()
data=spss.copy()


# 以时间为索引进行描述性统计

# In[3]:


spss.set_index('month',inplace=True)
data.drop('month',axis=1,inplace=True)
data.describe()  


# 我们制作2018-06-28到2022-11-28的三项数据的折线图，以便直观的观察三者的变化

# In[4]:


import matplotlib
#Sequence diagram of eight variables
column = data.columns.tolist() 
fig = plt.figure(figsize=(12,3), dpi=128) 
for i in range(3):
    matplotlib.rcParams['font.sans-serif'] = ['KaiTi']
    plt.subplot(1,3, i + 1)  
    sns.lineplot(data=spss[column[i]],lw=1)  
    plt.ylabel(column[i], fontsize=12)
plt.tight_layout()
plt.show()


# 我们观察到这些数据的变化有着类似的的趋势

# 我们继续绘制三个数据的箱线图

# In[5]:


#boxplot
column = data.columns.tolist() 
fig = plt.figure(figsize=(12,3), dpi=128)  
for i in range(3):
    plt.subplot(1,3, i + 1)   
    sns.boxplot(data=data[column[i]], orient="v",width=0.5)  
    plt.ylabel(column[i], fontsize=12)
plt.tight_layout()
plt.show()


# 画核密度图

# In[6]:



column = data.columns.tolist() 
fig = plt.figure(figsize=(12,3), dpi=128)  
for i in range(3):
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    plt.subplot(1,3, i + 1)   
    sns.kdeplot(data=data[column[i]],color='blue',shade= True) 
    plt.ylabel(column[i], fontsize=12)
plt.tight_layout()
plt.show()


# 从箱线图和核密度图可以看出数据的分布都还比较集中，没有很多异常点。

# 下面画所有变量两两之间的散点图

# In[7]:


sns.pairplot(data[column],diag_kind='kde')
plt.savefig('Scatter plot.jpg',dpi=256)


#  可以看到，几乎所有变量之间都有线性关系，人口有点像二次抛物线。
# 
# 画皮尔逊相关系数热力图

# In[8]:


#Pearson's correlation coefficient heatmap
corr = plt.figure(figsize = (10,10),dpi=128)
corr= sns.heatmap(data[column].corr(),annot=True,square=True)
plt.xticks(rotation=40)


#  很多X之间都存在的高的相关性，经典的最小二乘线性模型可能存在着严重的多重共线性。

# 进行线性回归分析

# In[9]:


import statsmodels.formula.api as smf
all_columns = "+".join(data.columns[1:])
print('x is ：'+all_columns)
formula = '进出口差额亿美元~' + all_columns
print('The regression equation is ：'+formula)


# In[10]:


results = smf.ols(formula, data=data).fit()
results.summary()


#  可以看到整体的拟合优度为100。在0.05的显著性水平下，人口和消费，还有净出口税收都对进出口差额亿美元的变动具有显著性的影响。
